MyBatis

您所在的位置:网站首页 mybatis-plus mongodb MyBatis

MyBatis

2023-05-22 06:34| 来源: 网络整理| 查看: 265

1.Maven配置: com.github.yulichang mybatis-plus-join 1.2.4 org.projectlombok lombok com.github.yulichang mybatis-plus-join 1.2.4 2.Service /** * Copyright © 2021-2025 JeePlus All rights reserved. */ package com.jeeplus.changecontrol.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.jeeplus.changecontrol.domain.ChangeControl; import com.jeeplus.changecontrol.domain.ChangeEvaluation; import com.jeeplus.changecontrol.mapper.ChangeEvaluationMapper; import com.jeeplus.changecontrol.service.dto.ChangeControlDTO; import com.jeeplus.changecontrol.service.dto.ChangeEvaluationDTO; import com.jeeplus.sys.domain.Office; import com.jeeplus.sys.domain.User; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.annotation.Resource; /** * 变更评估表Service * @author lgn * @version 2023-05-06 */ @Service @Transactional public class ChangeEvaluationService extends ServiceImpl { @Resource private ChangeEvaluationMapper changeEvaluationMapper; /** * * @author lgn * @date 2023/5/6 16:42 * @param changeEvaluationDTO * @param page * @return ChangeEvaluation */ public Page getEvaluationList(ChangeEvaluationDTO changeEvaluationDTO, Page page) { //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(ChangeEvaluation.class) .select(ChangeControl::getNumber) .select(ChangeControl::getName) .select(ChangeControl::getChangeCategory)//类别 .select(ChangeControl::getChangeGrade)//分级 .selectAs(User::getName, ChangeControlDTO::getUserName)//申请人名称 .selectAs(Office::getName,ChangeControlDTO::getOfficeName)//部门名称 .leftJoin(ChangeControl.class,ChangeControl::getId,ChangeEvaluation::getChangeControlId) .leftJoin(User.class,User::getId,ChangeControl::getPreparationUserId) .leftJoin(Office.class,Office::getId ,User::getOfficeId) .orderByDesc(ChangeEvaluation::getCreateTime); if (StringUtils.isNotEmpty(changeEvaluationDTO.getNumber())){ wrapper.like(ChangeControl::getNumber,changeEvaluationDTO.getNumber()); } if (StringUtils.isNotEmpty(changeEvaluationDTO.getName())){ wrapper.like(ChangeControl::getName,changeEvaluationDTO.getName()); } if (StringUtils.isNotEmpty(changeEvaluationDTO.getProcessStatus())){ wrapper.eq(ChangeEvaluation::getProcessStatus,changeEvaluationDTO.getProcessStatus()); } return page(page, wrapper); } /** * 查看详情 * @author lgn * @date 2023/5/9 16:25 * @param id * @return ChangeEvaluation */ public ChangeEvaluation getEvaluationInfo(String id) { //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(ChangeEvaluation.class) .select(ChangeControl::getNumber) .select(ChangeControl::getName) .select(ChangeControl::getChangeCategory)//类别 .select(ChangeControl::getChangeGrade)//分级 .selectAs(User::getName, ChangeControlDTO::getUserName)//申请人名称 .selectAs(Office::getName,ChangeControlDTO::getOfficeName)//部门名称 .leftJoin(ChangeControl.class,ChangeControl::getId,ChangeEvaluation::getChangeControlId) .leftJoin(User.class,User::getId,ChangeEvaluation::getPreparationUserId) .leftJoin(Office.class,Office::getId ,User::getOfficeId).eq(ChangeEvaluation::getId,id); return changeEvaluationMapper.selectOne(wrapper); } } 3.分页加模糊搜索说明: //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(ChangeEvaluation.class) .select(ChangeControl::getNumber) .select(ChangeControl::getName) .select(ChangeControl::getChangeCategory)//类别 .select(ChangeControl::getChangeGrade)//分级 .selectAs(User::getName, ChangeControlDTO::getUserName)//申请人名称 .selectAs(Office::getName,ChangeControlDTO::getOfficeName)//部门名称 .leftJoin(ChangeControl.class,ChangeControl::getId,ChangeEvaluation::getChangeControlId) .leftJoin(User.class,User::getId,ChangeControl::getPreparationUserId) .leftJoin(Office.class,Office::getId ,User::getOfficeId) .orderByDesc(ChangeEvaluation::getCreateTime); 3.1属性说明 selectAll():查询指定实体类的全部字段。 select():查询指定的字段,支持可变长参数同时查询多个字段,但是在同一个select中只能查询相同表的字段,所以如果查询多张表的字段需要分开写。 selectAs():字段别名查询,用于数据库字段与接收结果的dto中属性名称不一致时转换。 leftJoin():左连接,其中第一个参数是参与联表的表对应的实体类,第二个参数是这张表联表的ON字段,第三个参数是参与联表的ON的另一个实体类属性。 就相当于sql的写法: SELECT t.id, t.change_control_id, t.pdf_template_file, t.process_status, t.is_estimate, t.is_evaluation, t.approval_date, t.preparation_department, t.preparation_user_id, t.preparation_date, t.create_time, t.create_by_id, t.update_time, t.update_by_id, t.del_flag, t1.number, t1.NAME, t1.change_category, t1.change_grade, t2. NAME AS userName, t3. NAME AS officeName FROM tb_change_evaluation t LEFT JOIN tb_change_control t1 ON (t1.id = t.change_control_id) LEFT JOIN sys_user t2 ON ( t2.id = t1.preparation_user_id ) LEFT JOIN sys_office t3 ON (t3.id = t2.office_id) WHERE t.del_flag = 0 AND (t1. NAME LIKE ?) ORDER BY t.create_time DESC LIMIT ? 这里返回字段有个细节要注意一下

我这里是三表联查,把t1,t2,t3里面的字段返回给t的bean里面,t的domian和dto都要加上这些新返回的字段。 domain层:通常就是用于放置这个系统中,与数据库中的表,一一对应起来的JavaBean的。所以domian里面加的字段数据库里面没有,查询的时候就会报错,这里需要使用@TableField(exist = false)处理一下:

@TableField(exist = false) 注解可以解决表中表的问题,加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样可以用来把一个数据表当作一个字段来输出,用来实现表中表数据输出。这样设置在新增等使用bean的时候,mybatis-plus就会忽略这个。

/** * Copyright © 2021-2025 JeePlus All rights reserved. */ package com.jeeplus.changecontrol.domain; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.jeeplus.core.domain.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; /** * 变更评估表Entity * @author lgn * @version 2023-05-06 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("tb_change_evaluation") public class ChangeEvaluation extends BaseEntity { private static final long serialVersionUID = 1L; /** * 变更评估表id */ private String changeControlId; private String pdfTemplateFile; /** * 流程状态:0-审批中,1-已完成,2-审批不通过,3-不需审批 */ private String processStatus; /** * 是否需要评估 */ private String isEstimate; /** * 是否为已评估数据:0-否,1-是 */ private String isEvaluation; /** * 批准日期 */ private String approvalDate; /** * 编制部门id */ private String preparationDepartment; /** * 编制人id */ private String preparationUserId; /** * 编制日期 */ private String preparationDate; /** * 变更编号 */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String number; /** * 变更类别n */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String changeCategory; /** * 变更名称 */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String name; /** * 变更分级 */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String changeGrade; /** * @author lgn * @date 2023/5/5 11:30 */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String userName; /** * @author lgn * @date 2023/5/5 11:30 */ @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。 private String officeName; } 3.2模糊加精确搜索,返回分页 if (StringUtils.isNotEmpty(changeEvaluationDTO.getNumber())){ wrapper.like(ChangeControl::getNumber,changeEvaluationDTO.getNumber()); } if (StringUtils.isNotEmpty(changeEvaluationDTO.getName())){ wrapper.like(ChangeControl::getName,changeEvaluationDTO.getName()); } if (StringUtils.isNotEmpty(changeEvaluationDTO.getProcessStatus())){ wrapper.eq(ChangeEvaluation::getProcessStatus,changeEvaluationDTO.getProcessStatus()); } return page(page, wrapper);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3